package com.yyfax.pay.common.enums;

import org.apache.commons.lang3.StringUtils;

/**
 * 富友存管响应枚举
 * 
 * @author buyi
 * @date 2017-08-25 10:42:04
 * @since v2.0.0
 */
public enum FuiouDepositRspCodeEnum {
	/** 成功 */
	SUCCESS("0000"),

	/** 受理成功 */
	ACCEPTED("0001"),

	/** 无此用户 */
	ACCOUNT_NOT_EXIST("1001"),

	/** 实名信息不正确 */
	REAL_NAME_ERROR("1008"),

	/** 无效卡号(无此卡号) */
	INVALID_CARD_ID("1014"),

	/** 资金不足 */
	CAPITAL_NOT_ENOUGH("1051"),

	/** 无此商户 */
	MERCHANT_NOT_EXIST("1101"),

	/** 账户冻结余额小于0 */
	FROZEN_BALANCE_LESS_ZERO("3015"),

	/** 已冻结余额不足（小于交易金额） */
	FROZEN_BALANCE_NOT_ENOUGH("3016"),

	/** 可用余额小于0 */
	BALANCE_LESS_ZERO("3017"),

	/** 可用余额不足 */
	BALANCE_NOT_ENOUGH("3018"),

	/** 账户总余额不足 */
	ACCOUNT_TOTAL_BALANCE_NOT_ENOUGH("3021"),

	/** 收付款登录账户必须一个是商户一个是个人用户 */
	ACCOUNT_MUST_COMPANY_PERSION("5019"),

	/** 验证码发送次数超限 */
	VERIFY_CODE_OVER_LIMIT("8210"),
	/** 验证码失效或错误 */
	VERIFY_CODE_INVALID("8143"),
	/** 清分超时 */
	CLEAR_TIME_OUT("3271"),
	/** 记账超时 */
	ACCOUNT_TIME_OUT("3272"),
	/** 交易确定超时 */
	CONFIRM_TIME_OUT("5555"),
	/** 交易超时 */
	TRADE_TIME_OUT("200098"),

	/****************** 待确认响应码状态begin ****************/
	/** 内部超时 */
	INNER_TIMEOUT("5138"),
	/** 账户系统通信超时 */
	ACCOUNT_SYSTEM_TIMEOUT("5353"),
	/** 交易状态不明 */
	TRADE_STATE_UNKNOWN("999999"),
	/** 交易超时 */
	TRADE_TIMEOUT("1098"),
	/** 发卡行通信超时 */
	PUBLISH_CARD_TIMEMOUT("200002"),
	/** 网关内部错误 */
	GATEWAY_INNER_ERROR("5001"),
	/** 交易已受理 */
	TRADE_ACCEPTED("AAAA"),
	/****************** 待确认响应码状态end ****************/
	
	/** 重复签约*/
	PROTOCOL_DUPILICATE("5200"),

	/**　验证码错误*/
	VALID_CODE_ERROR("5201"),
	
	/** 表示验证码输入错误的次数超过次数*/
	VALID_CODE_CONFIRM_MAX_TIMES_ERROR("5211"),
	
	/** 该笔交易已失效，超过最大获取验证码次数*/
	SEND_SMS_OVER_LIMIT("5213"),
	
	/** 查询过频，请稍后再试*/
	QUERY_OFTEN("5214"),
	
	/** 请求获取验证码过频*/
	DUPLICATE_SEND_SMS("5215"),
	
	/** 未签约*/
	UN_SIGN("5359")
	;

	private String value;

	private FuiouDepositRspCodeEnum(String value) {
		this.value = value;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public boolean isValue(String value) {
		return StringUtils.equals(getValue(), value);
	}

	/**
	 * 判断是否超时
	 * 
	 * @author buyi
	 * @date 2017-09-28 19:45:31
	 * @since v2.0.0
	 * @param value
	 * @return
	 */
	public static boolean isTimeout(String value) {
		if (FuiouDepositRspCodeEnum.TRADE_TIME_OUT.isValue(value) || FuiouDepositRspCodeEnum.CLEAR_TIME_OUT.isValue(value)
				|| FuiouDepositRspCodeEnum.ACCOUNT_TIME_OUT.isValue(value) || FuiouDepositRspCodeEnum.CONFIRM_TIME_OUT.isValue(value)) {
			return true;
		}

		return false;
	}

	/**
	 * 判断是否待确认状态
	 * 
	 * @author buyi
	 * @date 2017-12-04 16:39:16
	 * @since v1.0.0
	 * @param value
	 * @return
	 */
	public static boolean isToConfirm(String value) {
		if (FuiouDepositRspCodeEnum.INNER_TIMEOUT.isValue(value) || FuiouDepositRspCodeEnum.ACCOUNT_SYSTEM_TIMEOUT.isValue(value)
				|| FuiouDepositRspCodeEnum.TRADE_STATE_UNKNOWN.isValue(value) || FuiouDepositRspCodeEnum.TRADE_TIMEOUT.isValue(value)
				|| FuiouDepositRspCodeEnum.PUBLISH_CARD_TIMEMOUT.isValue(value) || FuiouDepositRspCodeEnum.GATEWAY_INNER_ERROR.isValue(value)
				|| FuiouDepositRspCodeEnum.TRADE_ACCEPTED.isValue(value)) {
			return true;
		}

		return false;

	}
}
